5日目 システム管理の基礎
Linuxのユーザー管理
スーパーユーザー
全ての権限があるなんでもできるユーザー
ルートディレクトリにある大事なファイルはオーナーがrootになっている
code:rootユーザー
$ ls / -l
total 2097168
lrwxrwxrwx. 1 root root 7 Jun 1 2019 bin -> usr/bin
dr-xr-xr-x. 4 root root 4096 Jun 1 2019 boot
drwxr-xr-x. 17 root root 2860 Mar 1 04:25 dev
drwxr-xr-x. 78 root root 8192 Mar 1 04:25 etc
drwxr-xr-x. 3 root root 21 Jun 1 2019 home
lrwxrwxrwx. 1 root root 7 Jun 1 2019 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Jun 1 2019 lib64 -> usr/lib64
・・・
whoami ユーザー名を表示する
code:sudoでスーパーユーザーになる(vagrantのCentOS)
$ sudo su
root
vagrant
exit
exit
groups グループ名を表示する
id idを確認する
ユーザーやグループは内部的にIDで管理されている
通常は1000番台から自動振り分け
rootユーザーは特殊
code:rootユーザー
# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
suでユーザーを変更した場合、ユーザーIDだけが変更される
ホームディレクトリなどの環境は元のユーザーのまま
su - ユーザー名 環境も含めて別ユーザーに
sudo 一時的にスーパーユーザーの権限でコマンドを実行
MacやUbuntuなどはrootユーザーのパスワードが最初から設定されていないのでsudoを使う必要がある
ファイルのオーナー
lsコマンドの結果では、ファイルの所有者と所有グループ、アクセス権を確認できる
https://gyazo.com/27e23da97aa640ec96668cac7301188b
https://gyazo.com/68b78aa28ed93d2bb53071670ec753ca
chmod ファイルのアクセス権を変更する
chmod 利用者 オペレータ アクセス権 ファイルのパス
chmod a+w ファイルパス
あるファイルに対して全てのユーザーに書き換えを許可する
https://gyazo.com/6037cd30aa89d380fc0916d54010186e
https://gyazo.com/71c292401531ee0cf2561dec6480b58f
https://gyazo.com/d668fda65dfe36881fc97d46c3acc9e5
新規ファイルのアクセス権について
ファイルマスク値(umask値)という値によって決まる
一般的には下のような権限が付与される
https://gyazo.com/46c16752898ee8ba1416dcc01656d34f
code:ファイルの権限
$ sudo su
work
exit
-rw-rw-r--. 1 vagrant vagrant 0 Feb 21 15:09 newfile1.txt
-rw-r--r--. 1 root root 0 Mar 1 05:02 root.txt
上の通りrootでファイルを作るときと一般ユーザーで作るときでファイルの権限が違う(具体的にはグループの権限)
code:chmodで権限の変更
$ ls -l testtxt.txt
-rw-rw-r--. 1 vagrant vagrant 17 Mar 1 05:07 testtxt.txt
$ chmod a+x testtxt.txt
$ ls -l testtxt.txt
-rwxrwxr-x. 1 vagrant vagrant 7 Mar 1 05:07 testtxt.txt
ディレクトリのアクセス権
code:chmodでディレクトリのアクセスを変える
tmpfile
drwxrwxr-x. 2 vagrant vagrant 21 Mar 1 05:33 testdir
d-wxrwxr-x. 2 vagrant vagrant 21 Mar 1 05:33 testdir
ls: cannot open directory testdir/: Permission denied
読み込みの権限を変更したのでtestdir以下のファイルを読み込めなくなった
しかし書き換え=実行(x)は許可されているのでファイルやディレクトリは作成可能
code:実行は可能
$ chmod u-r testdir/
$ ls -l
d-wxrwxr-x. 2 vagrant vagrant 21 Mar 1 05:33 testdir
-rw-rw-r--. 1 vagrant vagrant 7 Mar 1 05:07 testtxt.txt
$ ls testdir/
ls: cannot open directory testdir/: Permission denied
$ ls -ld testdir/
d-wxrwxr-x. 2 vagrant vagrant 21 Mar 1 05:33 testdir/
$ mkdir testdir/test
$ touch testdir/touchedfile
$ chmod u+r testdir/
$ ls testdir/
test tmpfile touchedfile
ファイルの「実行」(x)を許可するということは、それをコマンドとして実行できることを表していました。それに対して、ディレクトリはコマンドとして実行できませんから意味が異なります。ディレクトリの場合の「実行」は、その下のディレクトリにアクセスできるかどうかを表します。
「読み出し」が許可されていない場合、どうして移動はできるのに一覧を表示できないのでしょう?UNIXでは、ディレクトリもディレクトリ内のファイルの一覧が格納された一種のファイルとして扱うことを思い出してください。「読み出し」を不許可にするということは、その一覧表を表示できなくするという意味になります。
chmodは数値でも設定可能
chmod 3桁の数字 ファイルのパス
https://gyazo.com/705514b3f6ea1d3a064fee6e41d6cb0f
2進数を10進数で書き換えている→chmod 777 ファイルのパス
chown 所有者を変更する
chown ユーザー名 ファイルのパス
chownコマンドにはスーパーユーザーの権限が必要になる
chgrp 所有グループの変更
chgrp グループ名 ファイルのパス
所有者とグループをまとめて変更する
chown ユーザー名 : グループ名 ファイルのパス
sとかSとかtとかもある(難しいので今はOK)
ファイルやディレクトリのサイズを確認する
ls -sh(s=サイズだけを表示、h=単位を表示)
code:ls -sh
$ ls -sh
total 28K
4.0K cal-copy.txt 0 dir1 4.0K newMail.txt 4.0K testtxt.txt
4.0K cal-p.txt 0 file-1.txt 0 newfile1.txt
4.0K cal.txt 0 hello world.txt 0 root.txt
4.0K crontab 4.0K mail.txt 0 testdir
大文字のSを追加でオプションに渡すとサイズが大きい順に表示される(逆順はr)
code:ls -Sh
$ ls -shS
total 28K
4.0K crontab 4.0K mail.txt 4.0K testtxt.txt 0 root.txt
4.0K cal-copy.txt 4.0K newMail.txt 0 file-1.txt
4.0K cal-p.txt 0 testdir 0 hello world.txt
4.0K cal.txt 0 dir1 0 newfile1.txt
カレントディレクトリの中のファイルのサイズは確認できるがディレクトリ内のファイルの合計サイズがわからない
du(disk usage)ディレクトリに含まれるファイルのサイズを調べる
階層が深くても、複数ディレクトリあってもOK
code:duの使い方
$ du -sh dir1/
4.0K dir1/
$ mkdir dir1/doc2/
$ ls dir1/
doc/ doc2/
$ cp doc/file-1.txt doc2/
$ ls dir1/doc2/
file-1.txt
$ du -sh dir1/
8.0K dir1/
-aオプションでそれぞれのファイルサイズも表示してくれる
code:du -ah
$ du -ah dir1/
4.0K dir1/doc/file-1.txt
4.0K dir1/doc
4.0K dir1/doc2/file-1.txt
4.0K dir1/doc2
8.0K dir1/
他のコマンドとパイプでつないで便利に使う
各ディレクトリのサイズを調べてサイズの大きい順に10表示する
code:サイズを調べて降順で並べる
$ du -k ~ | sort -nr | head
68 /home/vagrant
36 /home/vagrant/work
8 /home/vagrant/work/dir1
4 /home/vagrant/work/dir1/doc2
4 /home/vagrant/work/dir1/doc
4 /home/vagrant/.ssh
0 /home/vagrant/work/testdir/test
0 /home/vagrant/work/testdir
~の各ディレクトリのサイズを調べて(du)、k単位で表示(-k)
数字で並び替え(n)、降順(r)
最初から10件表示(head)
$du -ak Music | grep '\.mp3$' | sort -nr | head
Musicディレクトリ以下を調べて(du)、ファイルサイズを個別に表示(a)、結果はk単位で(k)
.mp3 拡張子を正規表現で表しファイルを検索して(grep)
数字で並べ変えて(n)降順で表示(r)
fileコマンド ファイルの種類を特定する
file ファイルのパス
code:ファイルの種類
$ file crontab
crontab: ASCII text
$ file cal-copy.txt
cal-copy.txt: ASCII text
$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildIDsha1=ceaf496f3aec08afced234f4f36330d3d13a657b, stripped ファイルの種類によって表示が変わる
ファイルの改竄を調べる
メッセージダイジェスト、あるいはフィンガープリントを調べる方法がある
md5sum ファイル名 (伝統的なコマンド)
code:md5sum 使い方
$ md5sum /bin/ls
729c4aa206c5dbc9155c637e932d3716 /bin/ls
上記の結果が他のファイルと同じならば内容が同じと判断できる
sha1sum、sha512sumなどはより安全度の高いメッセージダイジェストを生成
それぞれビット数が異なり、ビットが長い方が安全性が高いが、古いシステムだと対応していないことがある
簡単な仕組みは下図
関数の結果から入力値を求めることはできない
異なる入力で同じ結果が生成される確率はほとんどゼロにちかい
https://gyazo.com/5e0d6b3576c7773281dfe476fd747a0b
ログファイル
UNIXシステムでは、システム情報や、Webサーバのアクセス情報など、さまざまな情報が「ログ」としてファイルに書き込まれています。ログの書き出し方法は、サーバ自体が書き出すタイプと、「syslogd」というプログラムに依頼して書き出すタイプに分かれます。たとえば、Webサーバ「Apache」などは自分自身でログを生成しますが、システムのメッセージなどはsyslogdが担当しています。
ログファイルの保存先
/var/logディレクトリ以下にある